package com.gewu.pm.ui.activity.home;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.gewu.pm.R;
import com.gewu.pm.app.AppActivity;
import com.gewu.pm.bean.TestBean;
import com.gewu.pm.ui.activity.filter.FilterMultipleActivity;
import com.gewu.pm.ui.adapter.home.TerminalReceivableAdapter;
import com.gewu.pm.utils.MathUtils;
import com.hjq.base.BaseAdapter;

import java.util.ArrayList;
import java.util.List;

/**
 * 终端应收报表
 */
public final class ReportTerminalReceivableActivity extends AppActivity implements BaseAdapter.OnItemClickListener {

    private EditText mSearchEditText;
    private TextView mTotalAmountView;
    private RecyclerView mRecyclerView;

    private TerminalReceivableAdapter mAdapter;
    private List<TestBean> mDataList = new ArrayList<>();
    private List<TestBean> mAllDataList = new ArrayList<>();

    public static void start(Context context) {
        Intent intent = new Intent(context, ReportTerminalReceivableActivity.class);
        context.startActivity(intent);
    }

    @Override
    protected int getLayoutId() {
        return R.layout.terminal_receivable_activity;
    }

    @Override
    protected void initView(Bundle savedInstanceState) {
        mSearchEditText = findViewById(R.id.et_search);
        mTotalAmountView = findViewById(R.id.tv_total_amount);
        mRecyclerView = findViewById(R.id.rv_list);

        // 设置搜索框提示文字
        mSearchEditText.setHint("输入终端名称/编码");

        // 设置RecyclerView
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mAdapter = new TerminalReceivableAdapter(this);
        mAdapter.setOnItemClickListener(this);
        mRecyclerView.setAdapter(mAdapter);

        // 设置搜索监听
        mSearchEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                searchData(s.toString().trim());
            }
        });

        // 设置底部按钮点击事件
        findViewById(R.id.tv_bottom_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onCollectClick();
            }
        });
    }

    @Override
    protected void initData() {
        loadData();
    }

    @Override
    public void onRightClick(View view) {
        super.onRightClick(view);
        // 点击筛选按钮
        FilterMultipleActivity.start(getActivity());
    }

    @Override
    public void onItemClick(RecyclerView recyclerView, View itemView, int position) {
        TestBean bean = mAdapter.getItem(position);
        CustomerStatementActivity.start(getActivity(),bean.getId());
    }

    /**
     * 收款按钮点击事件
     */
    private void onCollectClick() {
        toast("收款功能");
    }

    /**
     * 加载数据
     * 
     * 功能说明：
     * 1. 清空原有数据
     * 2. 创建测试数据（实际项目中应从服务器获取）
     * 3. 更新列表显示
     * 4. 计算并更新待结算总金额
     */
    private void loadData() {
        // 清空数据列表
        mAllDataList.clear();
        mDataList.clear();

        // 创建测试数据（使用 TestBean）
        TestBean bean1 = new TestBean("1", "双东路生鲜店");
        TestBean bean2 = new TestBean("2", "南京路超市");
        TestBean bean3 = new TestBean("3", "人民广场便利店");

        // 添加到全部数据列表（用于搜索时恢复）
        mAllDataList.add(bean1);
        mAllDataList.add(bean2);
        mAllDataList.add(bean3);

        // 复制到当前显示列表
        mDataList.addAll(mAllDataList);
        
        // 更新适配器数据
        mAdapter.setData(mDataList);

        // 计算并更新待结算总金额
        updateTotalAmount();
    }

    /**
     * 搜索数据
     * 
     * 功能说明：
     * 1. 根据关键词筛选终端名称
     * 2. 更新列表显示
     * 3. 重新计算待结算总金额
     * 
     * @param keyword 搜索关键词
     */
    private void searchData(String keyword) {
        // 清空当前显示列表
        mDataList.clear();

        if (keyword.isEmpty()) {
            // 关键词为空，显示全部数据
            mDataList.addAll(mAllDataList);
        } else {
            // 根据关键词筛选数据（模糊匹配终端名称）
            for (TestBean bean : mAllDataList) {
                if (bean.getName().contains(keyword)) {
                    mDataList.add(bean);
                }
            }
        }

        // 更新适配器数据
        mAdapter.setData(mDataList);
        
        // 重新计算待结算总金额
        updateTotalAmount();
    }

    /**
     * 更新待结算总金额
     * 
     * 功能说明：
     * 1. 遍历当前显示的列表数据
     * 2. 累加每个终端的待结算金额（使用 MathUtils.moneyAdd 确保金额精度）
     * 3. 更新顶部待结算总金额显示
     * 
     * 注意：
     * - 实际项目中，金额应该从 Bean 中获取
     * - 这里为了演示，使用固定金额 11787.0
     */
    private void updateTotalAmount() {
        // 初始化总金额
        double totalAmount = 0.0;

        // 遍历当前显示的列表数据，累加金额
        // 注意：这里使用固定金额演示，实际应从 Bean 中获取
        for (TestBean bean : mDataList) {
            // 使用 MathUtils.moneyAdd 累加金额（确保金额精度）
            totalAmount = MathUtils.moneyAdd(totalAmount, 11787.0);
        }

        // 更新待结算总金额显示（格式化为一位小数）
        mTotalAmountView.setText(String.format("¥%.1f", totalAmount));
    }

}
